import { defineStore } from 'pinia'
import { getCategories, createCategory, updateCategory, deleteCategory } from '@/api/category'
import { ElMessage } from 'element-plus'

export const useCategoryStore = defineStore('category', {
  state: () => ({
    categories: [],
    total: 0
  }),

  actions: {
    // 获取分类列表
    async getCategories(params) {
      try {
        console.log('开始获取分类列表，参数:', params)
        const res = await getCategories(params)
        console.log('分类列表响应:', res)
        
        if (res.code === 200) {
          // 处理不同的响应格式
          if (Array.isArray(res.data)) {
            this.categories = res.data
            // 如果直接返回数组，且请求中包含分页参数，则可能是后端没有正确处理分页
            // 此时需要手动计算总页数
            if (params && params.page && params.pageSize) {
              // 如果响应头中包含总数信息，优先使用
              const totalCount = res.headers?.['x-total-count'] || res.headers?.['X-Total-Count']
              if (totalCount) {
                this.total = parseInt(totalCount) || res.data.length
              } else {
                // 否则假设这是所有数据，设置总数
                this.total = Math.max(res.data.length, params.page * params.pageSize)
              }
              console.log('从数组响应计算总数:', this.total)
            } else {
              this.total = res.data.length
            }
          } else if (res.data && res.data.records) {
            this.categories = res.data.records
            this.total = res.data.total || res.data.records.length
            console.log('从分页响应获取总数:', this.total)
          } else if (res.data) {
            this.categories = [res.data]
            this.total = 1
          } else {
            this.categories = []
            this.total = 0
          }
          return res.data
        }
        throw new Error(res.message || '获取分类列表失败')
      } catch (error) {
        console.error('获取分类列表失败:', error)
        ElMessage.error(error.message || '获取分类列表失败')
        throw error
      }
    },

    // 创建分类
    async createCategory(data) {
      try {
        console.log('创建分类，数据:', data)
        const res = await createCategory(data)
        if (res.code === 200) {
          ElMessage.success('创建分类成功')
          await this.getCategories()
          return res.data
        }
        throw new Error(res.message || '创建分类失败')
      } catch (error) {
        console.error('创建分类失败:', error)
        ElMessage.error(error.message || '创建分类失败')
        throw error
      }
    },

    // 更新分类
    async updateCategory(id, data) {
      try {
        console.log('更新分类，ID:', id, '数据:', data)
        const res = await updateCategory(id, data)
        if (res.code === 200) {
          ElMessage.success('更新分类成功')
          await this.getCategories()
          return res.data
        }
        throw new Error(res.message || '更新分类失败')
      } catch (error) {
        console.error('更新分类失败:', error)
        ElMessage.error(error.message || '更新分类失败')
        throw error
      }
    },

    // 删除分类
    async deleteCategory(id) {
      try {
        console.log('删除分类，ID:', id)
        const res = await deleteCategory(id)
        if (res.code === 200) {
          ElMessage.success('删除分类成功')
          await this.getCategories()
          return res.data
        }
        throw new Error(res.message || '删除分类失败')
      } catch (error) {
        console.error('删除分类失败:', error)
        ElMessage.error(error.message || '删除分类失败')
        throw error
      }
    }
  }
}) 